""" 用于定义图书管理系统的使用者 """

from operation_define import *


class User:
    """ 使用者接口 """
    def menu(self):
        """
        打印菜单
        :return:返回所选择的操作
        """
        pass

    def doOperation(self, choose, shelf):
        """
        转移表，通过choose调用对应的操作
        :param choose: 操作序号
        :param shelf: 暑假
        :return: None
        """
        pass


class NormalUser(User):
    """ 普通用户 """

    # 普通用户操作列表(私有成员)
    __operation_list = [Exit(), Borrow(), Return(), Find(), BookLendingList()]

    def __init__(self, account_name, password):
        # 构造方法
        self.account_name = account_name    # 用户名
        self.password = password            # 用户密码

    def menu(self):
        print("+-----------------------用户菜单-------------------------+")
        print(f"|{self.account_name},您好！欢迎来到用户菜单，请选择您的操作： \t\t\t\t|")
        print("|\t\t1：借阅图书\t\t2：归还图书                    \t|")
        print("|\t\t3：查找图书\t\t4：图书借阅排行榜                \t|")
        print("|\t\t0：退出系统                                      \t|")
        print("+-------------------------------------------------------+")
        print("==> : 请做出您的选择：", end='')
        choose = input()
        print('')
        return choose

    def doOperation(self, choose, shelf):
        choose = int(choose)
        if choose >= len(self.__operation_list):
            print("操作非法，请重新输入！")
        else:
            # 调用对应工作方法
            self.__operation_list[choose].work()


class AdminUser(User):
    """ 管理员 """

    # 管理员操作列表（私有成员）
    __operation_list = [Exit(), ShelfBook(), RemoveOfBooks(), Find(), Show(), Modify()]

    def __init__(self, account_name, password):
        # 构造方法
        self.account_name = account_name    # 用户名
        self.password = password            # 用户密码

    def menu(self):
        print("+-----------------------管理员菜单------------------------+")
        print(f"|{self.account_name},您好！欢迎来到管理员菜单，请选择您的操作： \t\t\t\t|")
        print("|\t\t1：上架图书\t\t2：下架图书                    \t|")
        print("|\t\t3：查找图书\t\t4：显示所有图书              \t\t|")
        print("|\t\t5：修改图书状态\t0：退出系统                      \t|")
        print("+-------------------------------------------------------+")
        print("==> : 请做出您的选择：", end='')
        choose = input()
        print('')
        return choose

    def doOperation(self, choose, shelf):
        choose = int(choose)
        if choose >= len(self.__operation_list):
            print("操作非法，请重新输入！")
        else:
            # 调用对应工作方法
            self.__operation_list[choose].work()


if __name__ == '__main__':
    test = AdminUser('root', '123456')
    test.menu()
